package com.gomoku;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;

// 对手列表窗口
class RivalWindow extends AlertDialog.Builder implements DialogInterface.OnClickListener {
    private final Handler mCallback;    // 回调
    private String[] mData;             // 数据，即所有用户名
    private AlertDialog mDialog;        // 对话框
    private int mSelectedItemIndex;     // 用户选中的表项的索引

    /**
     * 构造方法。
     * @param callback  回调
     * @param context   设备环境
     */
    public RivalWindow(Callback callback, Context context) {
        super(context);

        // 初始化成员
        mCallback = new Handler(callback);
        mSelectedItemIndex = -1;

        // 设置标题
        super.setTitle(R.string.IDS_RIVAL_LIST);

        // 创建按钮
        super.setPositiveButton(android.R.string.ok, this);
        super.setNegativeButton(android.R.string.cancel, this);
    }

    /**
     * 隐藏。
     */
    public void hide() {
        if (mDialog != null) {
            mDialog.hide();
        }
    }

    /**
     * 按钮的单击响应方法。
     * @param dialogInterface   对话框
     * @param index             用户单击的控件的索引
     */
    @Override
    public void onClick(DialogInterface dialogInterface, int index) {
        if (index == DialogInterface.BUTTON_POSITIVE) {
            this.onOK();
        }
        dialogInterface.dismiss();
    }

    /**
     * "确定"按钮的单击响应方法。
     */
    private void onOK() {
        if (mSelectedItemIndex >= 0) {
            final Message message = Message.obtain();
            message.what = Const.UM_GET_RIVAL_NAME;
            message.obj = mData[mSelectedItemIndex];
            mCallback.sendMessage(message);
        }
    }

    /**
     * 显示。
     * @return 对话框
     */
    @Override
    public AlertDialog show() {
        if (mDialog == null) {
            mDialog = super.create();
        }
        mDialog.show();
        return mDialog;
    }

    /**
     * 设置用户名列表。
     * @param usernameList  用户名列表
     */
    public void setUsernameList(String[] usernameList) {
        mData = usernameList;
        mSelectedItemIndex = 0;
        super.setSingleChoiceItems(mData, mSelectedItemIndex, (dialogInterface, i) -> mSelectedItemIndex = i);
        if (mDialog != null) {
            if (mDialog.isShowing()) {
                mDialog.dismiss();
                mDialog = super.create();
            }
        }
    }
}
